home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / xbmc-9.11.exe / scripts / RSS Editor / resources / lib / setEditor.py < prev    next >
Encoding:
Python Source  |  2009-11-24  |  6.3 KB  |  161 lines

  1. import xbmc
  2. import xbmcgui
  3. import os
  4. from xmlParser import XMLParser
  5.  
  6. #enable localization
  7. getLS = xbmc.Language(os.getcwd()).getLocalizedString
  8.  
  9.  
  10. class GUI(xbmcgui.WindowXMLDialog):
  11.  
  12.     def __init__(self, *args, **kwargs):
  13.         xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
  14.         self.setNum = kwargs['setNum']
  15.         self.parser = XMLParser()
  16.         if self.parser.feedsTree:
  17.             self.doModal()
  18.  
  19.  
  20.     def onInit(self):
  21.         self.defineControls()
  22.         if not self.parser.feedsList:
  23.             xbmcgui.Dialog().ok(getLS(40)+'RssFeeds.xml', 'RssFeeds.xml '+getLS(41), getLS(42), getLS(43))
  24.             self.closeDialog()
  25.         self.showDialog()
  26.  
  27.     def defineControls(self):
  28.         #actions
  29.         self.action_cancel_dialog = (9, 10)
  30.         #control ids
  31.         self.control_heading_label_id       = 2
  32.         self.control_list_label_id          = 3
  33.         self.control_list_id                = 10
  34.         self.control_modifySet_button_id    = 11
  35.         self.control_add_button_id          = 13
  36.         self.control_remove_button_id       = 14
  37.         self.control_ok_button_id           = 18
  38.         self.control_cancel_button_id       = 19
  39.         #controls
  40.         self.heading_label      = self.getControl(self.control_heading_label_id)
  41.         self.list_label         = self.getControl(self.control_list_label_id)
  42.         self.list               = self.getControl(self.control_list_id)
  43.         self.add_button         = self.getControl(self.control_add_button_id)
  44.         self.remove_button      = self.getControl(self.control_remove_button_id)
  45.         self.modifySet_button   = self.getControl(self.control_modifySet_button_id)
  46.         self.ok_button          = self.getControl(self.control_ok_button_id)
  47.         self.cancel_button      = self.getControl(self.control_cancel_button_id)
  48.         #defaults
  49.         self.dFeedsList = [{'url':'http://feeds.feedburner.com/xbmc', 'updateinterval':'30'}]
  50.  
  51.     def showDialog(self):
  52.         self.heading_label.setLabel(getLS(30))
  53.         self.list_label.setLabel(getLS(24))
  54.         self.modifySet_button.setLabel(getLS(6))
  55.         self.updateSetsList()
  56.  
  57.     def closeDialog(self):
  58.         """Close the Set Editor Dialog and open RSS Editor Dialog"""
  59.         import rssEditor
  60.         rssEditorUI = rssEditor.GUI("script-RSS_Editor-rssEditor.xml", os.getcwd(), "default", setNum = self.setNum)
  61.         self.close()
  62.         del rssEditorUI
  63.  
  64.     def onClick(self, controlId):
  65.         #select existing set
  66.         if controlId == self.control_list_id:
  67.             setItem = self.list.getSelectedItem()
  68.             self.setNum = setItem.getLabel()
  69.             self.parser.writeXmlToFile()
  70.             self.closeDialog()
  71.         #add new set
  72.         elif controlId == self.control_add_button_id:
  73.             self.getNewSet()
  74.             self.updateSetsList()
  75.         #remove existing set
  76.         elif controlId == self.control_remove_button_id:
  77.             self.removeSet()
  78.             self.updateSetsList()
  79.         #modify existing set
  80.         elif controlId == self.control_modifySet_button_id:
  81.             self.editSet()
  82.             self.updateSetsList()
  83.         #write sets to file/dialog to modify feeds within set.
  84.         elif controlId == self.control_ok_button_id:
  85.             self.parser.writeXmlToFile()
  86.             self.closeDialog()
  87.         #cancel dialog
  88.         elif controlId == self.control_cancel_button_id:
  89.             self.closeDialog()
  90.  
  91.     def onAction(self, action):
  92.         if action in self.action_cancel_dialog:
  93.             self.closeDialog()
  94.  
  95.     def onFocus(self, controlId):
  96.         pass
  97.  
  98.     def editSet(self):
  99.         """Edit the attributes of an existing set"""
  100.         setItem = self.list.getSelectedItem()
  101.         oldSetLabel = setItem.getLabel()
  102.         #ask user for set number
  103.         newSetNum = self.getSetNum(oldSetLabel[3:])
  104.         if newSetNum:
  105.             newSetLabel = 'set'+newSetNum
  106.             #ask user if set contains right to left text
  107.             rtl = self.containsRTLText()
  108.             #copy settings from old label
  109.             self.parser.feedsList[newSetLabel] = self.parser.feedsList[oldSetLabel]
  110.             #apply new attributes
  111.             self.parser.feedsList[newSetLabel]['attrs'] = {'rtl':rtl, 'id':newSetNum}
  112.             #if the set# changes, remove the old one.
  113.             if newSetLabel != oldSetLabel:
  114.                 self.removeSet(oldSetLabel)
  115.  
  116.     def getNewSet(self):
  117.         """Add a new set with some default values"""
  118.         #default setNumber = find highest numbered set, then add 1
  119.         defaultSetNum = max([int(setNum[3:]) for setNum in self.parser.feedsList.keys()])+1
  120.         #ask user for set number
  121.         newSetNum = self.getSetNum(defaultSetNum)
  122.         #check if set number already exists
  123.         if newSetNum:
  124.             newSetLabel = 'set'+newSetNum
  125.             #ask user if set contains right to left text
  126.             rtl = self.containsRTLText()
  127.             #add default information
  128.             self.parser.feedsList[newSetLabel] = {'feedslist':self.dFeedsList, 'attrs':{'rtl':rtl, 'id':newSetNum}}
  129.  
  130.     def getSetNum(self, defaultSetNum, title = getLS(25)):
  131.         newSetNum = str(xbmcgui.Dialog().numeric(0, title, str(defaultSetNum)))
  132.         if self.setNumExists(newSetNum) and newSetNum != defaultSetNum:
  133.             self.getSetNum(defaultSetNum, getLS(50) % newSetNum)
  134.         else:
  135.             return newSetNum
  136.  
  137.     def setNumExists(self, setNum):
  138.         if 'set'+setNum in self.parser.feedsList.keys():
  139.             return True
  140.  
  141.     def containsRTLText(self):
  142.         """Returns xml style lowercase 'true' or 'false'"""
  143.         return str(bool(xbmcgui.Dialog().yesno(getLS(27), getLS(27)))).lower()
  144.  
  145.     def removeSet(self, setNum = None):
  146.         """Removes a set or if set is required resets it to default"""
  147.         if setNum is None:
  148.             setNum = self.list.getSelectedItem().getLabel()
  149.         if setNum == 'set1':
  150.             #Ask if user wants to set everything to default.
  151.             if xbmcgui.Dialog().yesno(getLS(45), getLS(46), getLS(47)):
  152.                 self.parser.feedsList[setNum] = {'feedslist':self.dFeedsList, 'attrs':{'rtl':'false','id':'1'}}
  153.         else:
  154.             del self.parser.feedsList[setNum]
  155.  
  156.     def updateSetsList(self):
  157.         self.list.reset()
  158.         for setNum in sorted(self.parser.feedsList.keys()):
  159.             self.list.addItem(setNum)
  160.             self.list_label.setLabel(getLS(24))
  161.